package org.ace.account.impl;

import java.util.List;

import io.netty.channel.Channel;

import javax.annotation.Resource;

import org.ace.account.IAccountBiz;
import org.ace.cache.account.IAccountCache;
import org.ace.cache.user.IPlayerCache;
import org.ace.dao.model.Account;
import org.ace.dao.model.Player;
import org.springframework.stereotype.Service;
/*事务实现层
 * 制作部分逻辑处理和事务回滚
 * 数据从缓存层索取AccountCache
 * */
@Service("accountBiz")
public class AccountBiz implements IAccountBiz {

	//通过唯一ID 获取spring中管理的帐号缓存对象，缓存层类已定义
	@Resource(name="accountCache")
	private IAccountCache accountCache;
	
	@Resource(name="playerCache")
	private IPlayerCache playerCache;
	
	@Override
	public int login(Channel channel,String account, String passWord) {
		//有没有此帐号存在
		if(!accountCache.hasAccount(account)){
			return -1;//返回-1表示帐号不存在
		}
		if(accountCache.isOnLine(account)){
			return -3;//返回-3表示帐号当前处于登录状态
		}
		//获取账号信息
		Account accountModel= accountCache.get(account);
		//获取 账号下的是否有 角色 
		//List<Player> player=  playerCache.getList(accountModel.getId());
		//两个对象比较，密码是否相同
		if(!accountModel.getPassWord().equals(passWord)){
			return -2;//返回-2表示密码错误
		}
		//写入帐号上线缓存，已登陆
		accountCache.onLine(channel, account);
		//登录成功 返回帐号ID
		return accountModel.getId();//返回大于0 登录成功,没有角色，跳转到角色选着界面。
		
	}

	@Override
	public int create(String account, String passWord) {
		//有没有此帐号存在
		if(accountCache.hasAccount(account)){
			return -1;//返回-1表示帐号已存在
		}
		if(account.isEmpty() || account.length()>16 ||account.length()<4){
			return -2;//帐号不合法，登录的时也要检验
		}
		if(passWord.isEmpty() || passWord.length()>16 ||passWord.length()<4){
			return -3;//密码不合法
		}		
		accountCache.create(account, passWord);		
		return 0;//返回0 表示注册成功返回登录界面
	}
	
	public void offLine(Channel channel){
		accountCache.offLine(channel);
	}
	
	public void offLine(String account){
		accountCache.offLine(account);
	}

	@Override
	public int getAccId(Channel channel) {
	     return accountCache.getAccId(channel);
	}

}
